
package com.weavernorth.humanresource;


//import com.weavernorth.sysap.util.CommonToSapUtil;

import com.weavernorth.util.Logger4jUtil;
import org.apache.log4j.Logger;
import weaver.conn.RecordSet;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;

import java.math.BigDecimal;
import java.util.Calendar;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import sun.misc.BASE64Encoder;
import weaver.general.BaseBean;
import weaver.general.Util;

import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.Iterator;


//销售提成零售经理推送SAP接口
public class HRXstcLsjlAction implements Action {

//    public static Log log = LogFactory.getLog(HRXstcLsjlAction.class.getName());
public static Logger log = Logger4jUtil.getLoggerByName("/action/humanresource/HRXstcLsjlAction/");


//    //****************模板**************************
//
//    String xx=""; //模板
//    mbsql = "select  ygzzdm  from  uf_ygzz where id = " + rs.getString("ygzz");
//            mbrs.execute(mbsql);
//            if(mbrs.next()) {
//
//        xx=mbrs.getString("ygzzdm");
//
//
//        xml.append("<xx>" + xx + "</xxx>");
//    }
//
//            bb.writeLog("ygzz sql的值:" + mbsql +"\n");
//            bb.writeLog("ygzz 的值:" + xx +"\n");
//
//    //********************************************


//    //****************模板***************************
//
//    String czyy=""; //模板*
//            switch (rs.getInt("czyy")){
//
//        case 0:czyy = "10"; break;
//
//        case 1: czyy = "20"; break;
//    }
//
//            xml.append("<Massg>" + czyy + "</Massg>");
//    //xml.append("<Massg>" + rs.getString("czyy") + "</Massg>");
//
//            bb.writeLog("操作原因的值:" +czyy +"\n");
//
//    //********************************************


    @Override
    public String execute(RequestInfo requestInfo) {
        BaseBean bb = new BaseBean();

        //主表数据库
        RecordSet rs = new RecordSet();
        SalarRangeUtil salarRangeUtil = new SalarRangeUtil();
        //提示信息
        String strMessage = "";

        String testType = "";

        boolean isSuccess = false;
        //获取当前日期
        Calendar now = Calendar.getInstance();
        int day = now.get(Calendar.DAY_OF_MONTH);
        String requestid = requestInfo.getRequestid();//请求ID
        String workflowid = requestInfo.getWorkflowid();//流程ID
        String tablename = requestInfo.getRequestManager().getBillTableName();//表单名称
        bb.writeLog("人事-销售提成-零售经理tablename的值是:" + tablename + "\n requestid" + requestid);


        //主表数据库字段
        String rq = "";//日期


        RecordSet mbrs = new RecordSet();//码表rs
        String mbsql = "";  //查询码表sql

        //1.获取主表单数据
        String sql = " select * from " + tablename + " where requestid =" + requestid;
        bb.writeLog("人事-销售提成-零售经理接口sql的值是:" + sql + "\n");
        rs.execute(sql);
        if (rs.next()) {
            rq = rs.getString("czrq");//生效日期
            bb.writeLog("人事-销售提成-零售经理:日期sxrq的值是:" + rq + "\n");
        }
        //2.封装sap请求xml
        StringBuffer xml = new StringBuffer("");


        xml.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">");
       // xml.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:soap:functions:mc-style\">");


        xml.append("<soapenv:Header/>");
        xml.append("<soapenv:Body>");
        xml.append("<urn:ZHRI_077>");
       // xml.append("<urn:Zhri077>");

        //Return字段
        xml.append("<RETURN>");
//        xml.append("<Return>");

        xml.append("<item>");


        xml.append("<TYPE></TYPE>");
//        xml.append("<Type></Type>");


        xml.append("<ID></ID>");
//        xml.append("<Id></Id>");

        xml.append("<NUMBER></NUMBER>");
//        xml.append("<Number></Number>");

        xml.append("<MESSAGE></MESSAGE>");
//        xml.append("<Message></Message>");

        xml.append("<LOG_NO></LOG_NO>");
//        xml.append("<LogNo></LogNo>");


//        xml.append("<LogMsgNo></LogMsgNo>");
        xml.append("<LOG_MSG_NO></LOG_MSG_NO>");
//        xml.append("<MessageV1></MessageV1>");


        xml.append("<MESSAGE_V1></MESSAGE_V1>");
//        xml.append("<MessageV1></MessageV1>");
        xml.append("<MESSAGE_V2></MESSAGE_V2>");
//        xml.append("<MessageV2></MessageV2>");
        xml.append("<MESSAGE_V3></MESSAGE_V3>");
//        xml.append("<MessageV3></MessageV3>");
        xml.append("<MESSAGE_V4></MESSAGE_V4>");
//        xml.append("<MessageV4></MessageV4>");


        xml.append("<PARAMETER></PARAMETER>");
//        xml.append("<Parameter></Parameter>");

        xml.append("<ROW></ROW>");
//        xml.append("<Row></Row>");

        xml.append("<FIELD></FIELD>");
//        xml.append("<Field></Field>");

        xml.append("<SYSTEM></SYSTEM>");
//        xml.append("<System></System>");

        xml.append("</item>");
        xml.append("</RETURN>");
//        xml.append("</Return>");

        xml.append("<T_9135>");


        //子表数据

        RecordSet dt1rs = new RecordSet();

        //1.获取子表单dt1数据
        String dt1sql = " select  * from " + tablename + "_dt1 dt1 " + " where dt1.mainid=( select id from " + tablename + " mt where mt.requestid =" + requestid + ")";

        bb.writeLog("人事-销售提成-零售经理接口dt1sql的值是:" + dt1sql + "\n");
        dt1rs.execute(dt1sql);

        while (dt1rs.next()) {


            //****************销售提成-零售经理***************************


            //获取数据
            String ygbh = dt1rs.getString("ygbh");//员工编号

            //员工姓名
            String strYgxm=Util.null2String(dt1rs.getString("ygxm"));



            //zm 增加,判断工资范围是否锁定 开始
            String strGzfw=salarRangeUtil.getGzfwFromUser(strYgxm);

            String strLockMess = salarRangeUtil.judgeLock(strGzfw, rq);
            log.info("工资核算范围返回信息:" + strLockMess);
            if (!"".equals(strLockMess)) {
                strLockMess="工号为:"+ygbh+","+strLockMess+"薪资核算结束后，工资范围解除锁定，流程可以继续提交";
                requestInfo.getRequestManager().setMessagecontent(strLockMess);
                return FAILURE_AND_CONTINUE;

            }
            //zm 增加,判断工资范围是否锁定 结束bg=new BigDecimal(strResults);

            BigDecimal rw = new BigDecimal(dt1rs.getString("fgsxsrw"));//任务-分公司销售任务
            log.info("分公司销售任务："+rw);
            BigDecimal zjyj = new BigDecimal(dt1rs.getString("fgsxsyj"));//正价业绩-分公司销售业绩
            log.info("分公司销售业绩："+zjyj);
            BigDecimal zjyj1 = new BigDecimal(0.0);//折价业绩

            BigDecimal wcl =new BigDecimal(dt1rs.getString("wcl"));//完成率
            log.info("完成率："+wcl);

            BigDecimal zjjj = new BigDecimal(0.0);//正价奖金
            BigDecimal zjjj1 = new BigDecimal(0.0);//折价奖金

            BigDecimal zjj = new BigDecimal(dt1rs.getString("tcje"));//总奖金
            log.info("总奖金："+zjj);
            String tcrq = rq;//提成日期


            //转码


            //子表数据
//            xml.append("<item>");
//            xml.append("<PERNR>"+ygbh+"</PERNR>");//员工编号(子表)
//
//            xml.append("<ZRWJE>"+rw+"</ZRWJE>");//任务(子表)
//            xml.append("<ZZJJE>"+zjyj+"</ZZJJE>");//正价业绩(子表)
//            xml.append("<ZZJJE1>"+zjyj1+"</ZZJJE1>");//折价业绩(子表)
//            xml.append("<ZPER>"+wcl+"</ZPER>");//完成率(子表)
//            xml.append("<ZZJJJ>"+zjjj+"</ZZJJJ>");//正价奖金(子表)
//            xml.append("<ZZJJJ1>"+zjjj1+"</ZZJJJ1>");//折价奖金(子表)
//            xml.append("<ZJJ>"+zjj+"</ZJJ>");//总奖金(子表)
//            xml.append("<ZDATE>"+tcrq+"</ZDATE>");//提成日期(子表)
//
//            xml.append("</item>");

            //子表数据
            xml.append("<item>");
            xml.append("<PERNR>"+ygbh+"</PERNR>");//员工编号(子表)
//            xml.append("<Pernr>" + ygbh + "</Pernr>");//员工编号(子表)

            xml.append("<ZRWJE>"+rw+"</ZRWJE>");//任务(子表)
//            xml.append("<Zrwje>" + rw + "</Zrwje>");//任务(子表)

            xml.append("<ZZJJE>"+zjyj+"</ZZJJE>");//正价业绩(子表)
//            xml.append("<Zzjje>" + zjyj + "</Zzjje>");//正价业绩(子表)


            xml.append("<ZZJJE1>"+zjyj1+"</ZZJJE1>");//折价业绩(子表)
//            xml.append("<Zzjje1>" + zjyj1 + "</Zzjje1>");//折价业绩(子表)

            xml.append("<ZPER>"+wcl+"</ZPER>");//完成率(子表)
//            xml.append("<Zper>" + wcl + "</Zper>");//完成率(子表)


            xml.append("<ZZJJJ>"+zjjj+"</ZZJJJ>");//正价奖金(子表)
//            xml.append("<Zzjjj>" + zjjj + "</Zzjjj>");//正价奖金(子表)

            xml.append("<ZZJJJ1>"+zjjj1+"</ZZJJJ1>");//折价奖金(子表)
//            xml.append("<Zzjjj1>" + zjjj1 + "</Zzjjj1>");//折价奖金(子表)

            xml.append("<ZJJ>"+zjj+"</ZJJ>");//总奖金(子表)
//            xml.append("<Zjj>" + zjj + "</Zjj>");//总奖金(子表)


            xml.append("<ZDATE>"+tcrq+"</ZDATE>");//提成日期(子表)
//            xml.append("<Zdate>" + tcrq + "</Zdate>");//提成日期(子表)

            xml.append("</item>");


        }


        xml.append("</T_9135>");

        xml.append("</urn:ZHRI_077>");
//        xml.append("</urn:Zhri077>");


        xml.append("</soapenv:Body>");
        xml.append("</soapenv:Envelope>");


        bb.writeLog("人事-销售提成-零售经理接口XML的值是:" + xml.toString());


        //CommonToSapUtil commonToSapUtil=new CommonToSapUtil();
        try {
            //3.推送数据


            String txurl = Util.null2String(bb.getPropValue("personnel-erdos", "xstcurl"));




            String responseXml = salarRangeUtil.sendPost(txurl, xml.toString(), "utf-8");

            bb.writeLog("人事-销售提成-零售经理接SAP返回的值是:" + responseXml.toString());

            //===========SAP 返回解析====================

            String strWorkcode = "";

            //xmlStr为上图格式的字符串


            String EPernr = "";//员工ZddpfstjToSapTimmer编码

            Document doc = null;
            try {
                doc = DocumentHelper.parseText(responseXml.toString());
                Iterator<Element> its2 = doc.selectNodes("//TYPE").iterator();
                while (its2.hasNext()) {
                    Element element = its2.next();
                    testType = element.getText();
                    //System.out.println(testType);
                    if (!"".equals(testType)) {
                        isSuccess = true;
                        bb.writeLog("推送成功testType值为:" + testType + "\n");
                        break;
                    }


                }


                //返回值失败时,则提示失败
                if ("E".equals(testType)) {
                    Iterator<Element> its3 = doc.selectNodes("//MESSAGE").iterator();
                    while (its3.hasNext()) {
                        Element element2 = its3.next();
                        strMessage = element2.getText();
                        if (!"".equals(strMessage)) {
                            break;
                        }
                    }

                }

            } catch (Exception e) {
                e.printStackTrace();
            }


//            //人事-销售提成-零售经理接口成功,获取EPernr员工编号
//            if (isSuccess == true && doc.selectSingleNode("//EPernr") != null) {
//                String returnEPernr = Util.null2String(doc.selectSingleNode("//EPernr").getText());
//
//                //判断员工号是否为空
//                if (!"".equals(returnEPernr)) {
//
//                    EPernr = returnEPernr;
//
//
//                    bb.writeLog("提交成功!!!!\n");
//                    bb.writeLog("员工编号:" + returnEPernr +"\n");
//
//                }
//                else{
//
//                    //没有员工编号
//
//                    bb.writeLog("没有员工编号!!!!\n");
//                    return FAILURE_AND_CONTINUE;
//
//                }
//            }
//            else{
//
//                //人事-销售提成-零售经理接口不成功或没有员工编号节点信息
//                bb.writeLog("没有节点信息!!!!:"+isSuccess+"\n");
//                return FAILURE_AND_CONTINUE;
//            }
            //根据返回值是否提交流程
            if ("S".equals(testType)) {
                return SUCCESS;
            } else {
                if (!"".equals(strMessage)) {
                    requestInfo.getRequestManager().setMessagecontent(strMessage);
                }
                return FAILURE_AND_CONTINUE;
            }


            //4.将员工编号需要更新表单字段
//            String sqlIp="update "+tablename+" set hth="+strWorkcode+" where requestid="+requestid;
//            rs.executeQuery(sqlIp);


            //****************更新员工编号*************************
            //RecordSet updaters = new RecordSet();

//            String updatesql = "update "+tablename+" set hth="+EPernr+" where requestid="+requestid;
//            rs.executeQuery(updatesql);


//            bb.writeLog("update员工号 sql的值:" + updatesql +"\n");
//            bb.writeLog("EPernr员工号 的值:" + EPernr +"\n");

            //******************************************


        } catch (Exception e) {
            e.printStackTrace();
            return FAILURE_AND_CONTINUE;
        }


       // return FAILURE_AND_CONTINUE;
        //return SUCCESS;
    }
}












